import {ElMessageBox} from "element-plus";
import {filterCustomButtonsJsFunctions, loopAddButtons} from "@/plugins/pageoffice/pageoffice-common.js";

//PDFCtrl 所需通用JS函数
const commonJsFunctionsForPDF = {
    // PDFCtrl控件 的初始化事件回调函数，函数名是指定的的，不能修改，您可以在这里进行添加自定义按钮等操作，
    // 不同组件中调用时可根据实际需求重写该函数，
    OnPDFCtrlInit: () => {
        // 添加通用的自定义按钮
        pdfCtrlUtil.addCommonButtons()
    },
    // PageOffice的初始化事件回调函数，函数名是指定的的，不能修改，您可以在这里进行添加自定义按钮等操作
    AfterDocumentOpened: () => {
        pdfctrl.BookmarksVisible = false
        //默认以实际大小显示页面
        pdfctrl.SetPageFit(1)
    },
    // 以下的为PageOffice自定义按钮的回调函数
    SetPageReal: () => {
        pdfctrl.SetPageFit(1)
    },
    SetPageFit: () => {
        pdfctrl.SetPageFit(2)
    },
    SetPageWidth: () => {
        pdfctrl.SetPageFit(3)
    },
    ZoomIn: () => {
        pdfctrl.ZoomIn()
    },
    ZoomOut: () => {
        pdfctrl.ZoomOut()
    },
    FirstPage: () => {
        pdfctrl.GoToFirstPage()
    },
    PreviousPage: () => {
        pdfctrl.GoToPreviousPage()
    },
    NextPage: () => {
        pdfctrl.GoToNextPage()
    },
    LastPage: () => {
        pdfctrl.GoToLastPage()
    },
    SetRotateRight: () => {
        pdfctrl.RotateRight()
    },
    SetRotateLeft: () => {
        pdfctrl.RotateLeft()
    },
    switchFullScreen: () => {
        pdfctrl.FullScreen = !pdfctrl.FullScreen
    },
    closePOBrowser: () => {
        pdfctrl.CloseWindow()
    }
}

//自定义按钮所需的所有通用JS函数（不需要根据业务需求重写的js函数）
const customButtonsCommonJsFunctionsForPDF = {
    // 以下的为PageOffice自定义按钮的回调函数
    //另存
    saveAsFile: () => {
        pdfctrl.ShowDialog(3)
    },
    //打印
    printFile: () => {
        pdfctrl.ShowDialog(4)
    },
    //盖章
    addSeal: () => {
        pdfctrl.zoomseal.AddSeal()
    },
    //签字
    addHandSign: () => {
        pdfctrl.zoomseal.AddHandSign()
    },
    //导出扫描件
    exportToPDF: () => {
        try {
            pdfctrl.PrintOut(true, "microsoft print to pdf")
        } catch (e) {
            try {
                pdfctrl.PrintOut(true, "Microsoft XPS Document Writer")
            } catch (e) {
                pageofficeCtrlUtil.msgError(e.message)
            }
        }
    },
}

/**
 * 添加通用按钮：全屏、关闭按钮等
 */
function addCommonButtons() {
    const btnArray = [
        ["实际大小", "SetPageReal()", 16],
        ["适合页面", "SetPageFit()", 17],
        ["适合宽度", "SetPageWidth()", 18],
        ["缩小", "ZoomOut()", 17],
        ["放大", "ZoomIn()", 18],
        ["-", "", 0],
        ["首页", "FirstPage()", 8],
        ["上一页", "PreviousPage()", 9],
        ["下一页", "NextPage()", 10],
        ["尾页", "LastPage()", 11],
        ["-", "", 0],
        ["向左旋转90度", "SetRotateLeft()", 12],
        ["向右旋转90度", "SetRotateRight()", 13],
        ["-", "", 0],
        ["全屏", "switchFullScreen", 4],
        ["关闭", "closePOBrowser", 21],
    ]
    loopAddButtons(btnArray, true)
}

/**
 * pdfctrl 控件窗口中使用的提示框
 * @param content 提示信息
 * @param type 提示框样式：info、error、success
 */
function pdfCtrlMessageBox(content, type) {
    pdfctrl.Enabled = false
    ElMessageBox.alert(content, '', {
        confirmButtonText: '确定',
        buttonSize: 'small',
        showClose: false,
        type: type,
        callback: () => {
            pdfctrl.Enabled = true
        }
    })
}

const pdfCtrlUtil = {
    /**
     *
     * 挂载PDFCtrl控件 所需调用的js函数（包括 控件绑定的事件、添加的自定义按钮所执行的js函数等）
     * @param customJsFunctions 除通用js函数外，每个 PDFCtrl 控件所需的其他自定义js函数
     * @param customButtonsArray 自定义按钮参数组成的二维数组：[[caption1, jsFunctionName1, iconIndex1], [caption2, jsFunctionName2, iconIndex2], ...]
     */
    jsFunctionMounted(customJsFunctions, customButtonsArray) {
        const customButtonsJsFunctions = filterCustomButtonsJsFunctions(customButtonsArray, customButtonsCommonJsFunctionsForPDF)
        //将需要回调的函数挂载到PageOffice控件，例如控件触发的事件、自定义按钮触发的函数。POPageMounted为指定属性名，不能修改
        window.POPageMounted = {...commonJsFunctionsForPDF, ...customJsFunctions, ...customButtonsJsFunctions}
    },

    /**
     * 根据业务需求添加所需的自定义按钮，例如：保存、打印等按钮
     * @param customBtnArray
     */
    addCustomButtons(customBtnArray) {
        //根据业务需求添加所需的自定义按钮，例如：保存、打印按钮等
        loopAddButtons(customBtnArray, true)
        //添加通用按钮：全屏、关闭按钮等
        addCommonButtons()
    },

    msgInfo(content) {
        pdfCtrlMessageBox(content, 'info')
    },

    msgSuccess(content) {
        pdfCtrlMessageBox(content, 'success')
    },

    msgError(content) {
        pdfCtrlMessageBox(content, 'error')
    },
}

export default pdfCtrlUtil